Конфигурация кораблей для Homeworld 2
При создании своих кораблей крайне важно также и правильно их сконфигурировать. Homeworld 2 предлагает достаточно возможностей для настройки поведения игровых моделей. Конечно, не на всё хватает предоставленных фишек, но на большую часть - явно. Файлы корабля, чтобы игра их распознала, должны храниться в папке /Data/ship, в каталоге с характерным именем "префиксрасы_названиекорабля", а его настройки - в этой папке, в *.ship-файле, у которого должно быть то же имя, что и папки. Впрочем, это касается всего содержимого каталога. Содержимое файла *.ship-файл по сути является *.lua-файлом, поэтому в нём работают все lua-фишки. Ниже даются объяснения по настройкам кораблей (TBD...). Общие настройки -- Usual frigate characteristics -- 4HW2TP -- -- HICFr - Hiigaran Ion Cannon Frigate; -- VHMFr - Vaygr Heavy Missile Frigate; -- VIFr - Vaygr Infiltrator Frigate; -- HMFr - Hiigaran Marine Frigate; -- VAFr - Vaygr Assault Frigate; -- HFFr - Hiigaran Flac Frigate; -- HTFr - Hiigaran Torpedo Frigate; -- HDFFr - Hiigaran Defense Field Frigate; -- Assault frigates (assaults) - VAFr & HFFr; -- Special frigates (specials) - HMFr, HDFFr & VIFr; -- Capture frigates - HMFr & VIFr; -- Anti-capital frigates (anticaps) - HICFr & VHMFr; -- * Описательные настройки NewShipType = StartShipConfig() NewShipType.displayedName = "$1520" -- name; NewShipType.sobDescription = "$1521" -- description; NewShipType.buildCost = 700 --usual cost is about 700; NewShipType.buildTime = 50 --usually about 45-50; * Здоровье и броня NewShipType.maxhealth = 16000 -- usual stat is 16k; 12k for HTFr, 18k for HDFFr, 20k for HMFr; NewShipType.regentime = 1200 NewShipType.minRegenTime = 1200 -- this is changable, 450 for the vaygr, 1200 for the hiigarans; NewShipType.sideArmourDamage = 1.2 NewShipType.rearArmourDamage = 1.2 NewShipType.collisionMultiplier = 1 NewShipType.dustCloudDamageTime = 160 NewShipType.nebulaDamageTime = 200 NewShipType.mass = 100 NewShipType.isTransferable = 1 NewShipType.useEngagementRanges = 1 NewShipType.unitCapsNumber = 2 * Формации и звенья NewShipType.SquadronSize = 1 NewShipType.formationSpacing = 250 --this line may not be present, if frigate is thought to be lone-wolf - like HMFr; NewShipType.passiveFormation = "Spear" -- hiigaran have "spear", vaygr got "dockline"; NewShipType.defensiveFormation = "x" -- hiigaran have "x", vaygr got "broad"; NewShipType.aggressiveFormation = "Claw" -- hiigaran have "claw", vaygr got "delta"; * Скорости и движение NewShipType.controllerType = "Ship" NewShipType.thrusterMaxSpeed = 161 -- standard is 161; anticaps have 150; capture frigates - 230; NewShipType.thrusterAccelTime = 7 NewShipType.thrusterBrakeTime = 2 NewShipType.mainEngineMaxSpeed = 161 -- is the same with the .thrusterMaxSpeed; NewShipType.mainEngineAccelTime = 8 NewShipType.mainEngineBrakeTime = 2 NewShipType.rotationMaxSpeed = 22 -- usual 22, HICF got 35; NewShipType.rotationAccelTime = 0.75 --standard is 0.75, HICF got 0.4; NewShipType.rotationBrakeTime = 0.4 -- hiigaran standard is 0.4, HICFr got 0.2; vaygr got 0.3 ; NewShipType.thrusterUsage = 0.5 --standard is 0.5, capture frigates got 0.75; NewShipType.accelerationAngle = 40 NewShipType.mirrorAngle = 0 NewShipType.secondaryTurnAngle = 0 NewShipType.maxBankingAmount = 20 NewShipType.descendPitch = 20 NewShipType.goalReachEpsilon = 30 NewShipType.slideMoveRange = 100 NewShipType.tumbleStaticX = 10 NewShipType.tumbleStaticY = 20 NewShipType.tumbleStaticZ = 5 NewShipType.tumbleDynamicX = 2 NewShipType.tumbleDynamicY = 10 NewShipType.tumbleDynamicZ = 5 NewShipType.tumbleSpecialDynamicX = 2 NewShipType.tumbleSpecialDynamicY = 10 NewShipType.tumbleSpecialDynamicZ = 5 NewShipType.relativeMoveFactor = 3 --all but VIFr with 2; NewShipType.swayUpdateTime = 4 --Hiigaran have 4, Vaygr have 2; NewShipType.swayOffsetRandomX = 10 NewShipType.swayOffsetRandomY = 10 NewShipType.swayOffsetRandomZ = 10 --NewShipType.swayBobbingFactor = 0.05 --hiigaran standard is 0.05, HMFr got 0.1, HFFr - 0.15; vaygr all have 0.15; NewShipType.swayRotateFactor = 0 NewShipType.useTargetRandom = 1 ------------------- .targetRandomPoint* parameter is individual; --NewShipType.targetRandomPointXMin = -0.3 --NewShipType.targetRandomPointXMax = 0.4 --NewShipType.targetRandomPointYMin = -0.35 --NewShipType.targetRandomPointYMax = 0.6 --NewShipType.targetRandomPointZMin = -0.75 --NewShipType.targetRandomPointZMax = 0.85 -------------------- * Принадлежность к "семьям" NewShipType.MinimalFamilyToFindPathAround = "MotherShip" NewShipType.BuildFamily = "Frigate_Tdn" -- depends on race which frigate belongs to; NewShipType.AttackFamily = "Frigate" --could be another family, like "capturer", for HMFr; NewShipType.DockFamily = "Frigate" NewShipType.AvoidanceFamily = "Frigate" NewShipType.DisplayFamily = "Frigate" NewShipType.AutoFormationFamily = "Frigate" NewShipType.CollisionFamily = "Big" NewShipType.ArmourFamily = "MediumArmour" NewShipType.UnitCapsFamily = "Frigate" NewShipType.UnitCapsShipType = "CaptureFrigate" --this line may not be present if no special count on them; * Информация для AI NewShipType.fighterValue = 0 NewShipType.corvetteValue = 0 NewShipType.frigateValue = 10 --usually is 10, but if powerful frigate, then 12; NewShipType.neutralValue = 0 NewShipType.antiFighterValue = 0 NewShipType.antiCorvetteValue = 0 NewShipType.antiFrigateValue = 12 NewShipType.totalValue = 10 --usually is the same with the .frigateValue; NewShipType.buildPriorityOrder = 30 --usually 30, but may differ; * Визуальное отображение NewShipType.retaliationRange = 5500 NewShipType.retaliationDistanceFromGoal = 160 NewShipType.TOIcon = "Diamond" NewShipType.TOScale = 1 NewShipType.TODistanceFade0 = 9000 NewShipType.TODistanceDisappear0 = 7000 NewShipType.TODistanceFade1 = 4500 NewShipType.TODistanceDisappear1 = 3500 NewShipType.TODistanceFade2 = 12000 NewShipType.TODistanceDisappear2 = 35000 NewShipType.TOGroupScale = 1 NewShipType.TOGroupMergeSize = 0 NewShipType.mouseOverMinFadeSize = 0.045 NewShipType.mouseOverMaxFadeSize = 0.1 NewShipType.nlips = 0.000125 --usually is 0.000125, except HMFr - 0.0001 - and assaults - 0.00015; NewShipType.nlipsRange = 6000 NewShipType.nlipsFar = 0.0001 --usually is 0.0001, except assaults & VHMFr - 0.00015; NewShipType.nlipsFarRange = 10000 NewShipType.SMRepresentation = "HardDot" NewShipType.meshRenderLimit = 13000 NewShipType.dotRenderLimit = 10 NewShipType.visibleInSecondary = 1 NewShipType.minLOD = 0.25 --usual is 0.25, except VIFr - 0.3; NewShipType.goblinsStartFade = 1500 NewShipType.goblinsOff = 1500 NewShipType.upLOD = 2000 NewShipType.upLOD = 2500 NewShipType.downLOD = 2015 NewShipType.downLOD = 2515 NewShipType.minimumZoomFactor = 0.6 -- anticaps got 0.6; assaults with torpedo got 0.63 (anti-strikecraft); specials got 0.5; NewShipType.selectionLimit = 150000 NewShipType.preciseATILimit = 0 NewShipType.selectionPriority = 75 NewShipType.healthBarStyle = 1 * Сенсоры NewShipType.visualRange = 1000 NewShipType.prmSensorRange = 5000 NewShipType.secSensorRange = 6000 NewShipType.detectionStrength = 1 NewShipType.militaryUnit = 1 * Докинг NewShipType.dockTimeBetweenTwoFormations = 1 NewShipType.dockTimeBeforeStart = 2 NewShipType.dockNrOfShipsInDockFormation = 1 NewShipType.dockFormation = "delta" NewShipType.queueFormation = "dockline" NewShipType.dontDockWithOtherRaceShips = 1 NewShipType.ignoreRaceWhenDocking = 0 * Запуск NewShipType.launchTimeBetweenTwoFormations = 1 NewShipType.launchTimeBeforeStart = 2 NewShipType.launchNrOfShipsInDockFormation = 1 NewShipType.launchFormation = "delta" LoadModel(NewShipType, 1) * Повреждения и смерть NewShipType.battleScarMaxTriBase = 75 NewShipType.battleScarMaxTriInc = 100 NewShipType.sobDieTime = 1 NewShipType.sobSpecialDieTime = 1 NewShipType.specialDeathSpeed = 40 NewShipType.chanceOfSpecialDeath = 0 NewShipType.deadSobFadeTime = 0 * Выхлоп NewShipType.trailLinger = 4 -- vaygr have 2, hiigaran have 4, except HDFFr, which is also 2; setEngineBurn('NewShipType, -- assaults and specials got this parameter; 6, -- hiigaran have 6, vaygr have 4; 1, 1.5, 60, --standard; 1.01, -- hiigaran have 1.01, vaygr got 1.1; 0.1, 0.25, --standard; 120 -- hiigaran have 120, vaygr have 100; ) '''setEngineGlow('NewShipType, 1, 1, 1.02, 20, 300, 50, 1.5, -- standard for all frigates; {0.27, 0.47, 0.69, 0.25,} - these are hiigaran stats, vaygr have {0.92, 0.21, 0.09, 0.25,}; ''') * Озвучка фрегата loadShipPatchList(NewShipType, "data:sound/sfx/ship/Hiigaran/Frigate/", 0, -- these are hiigaran stats, vaygr have ("data:sound/sfx/ship/Vaygr/Frigate/", 0,); "Engines/HFrigateEng", "", 1, -- these are hiigaran stats, vaygr have ("Engines/VFrigateEng", "", 1,); "Ambience/HFrigateAmb", "" -- these are hiigaran stats, vaygr have ("Ambience/VFrigateAmb", ""); )' Abilities В следующих строчках будут описаны параметры абилок через комментарии к коду; если комментариев нет - значит, хз, чо за параметр, то есть, требуется экспериментатор для проверки. Стандартные абилки '''addAbility('NewShipType, "ParadeCommand", 1)' ''--цифра показывает, доступно ли по умолчанию; addAbility('NewShipType, "MoveCommand", 1,--доступно ли по умолчанию;'' 0 ''') addAbility('''NewShipType, "WaypointMove")' '''addAbility('NewShipType, "GuardCommand", 1,''--доступно ли по умолчанию;'' 3000, 600 ) --standard is (1, 3000, 600), but HDFFr have (1, 3000, 300); addAbility('NewShipType, "RetireAbility", 1,--доступно ли по умолчанию;'' 1 ''') addAbility('NewShipType, "CanAttack", --may not be present if frigate got no weapons; 1, --доступно ли по умолчанию;'' 1, 0, 1, 0.35, 1.5, -- standard for all frigates; "Capturer, Frigate, SmallCapitalShip, BigCapitalShip, Mothership, Utility, Corvette", --depends on frigate specialization; I guess, order defines preferrable target; "Frontal", --standard for all frigates; {SubSystem = "FrontalVsSubSystem",}, -- standard for all frigates; ... ''--и дополнять дальше по вышеозначенным образцам, семью атакуемых смотреть в '''familylist.lua, тип атаки - хз;'' {Corvette = "MoveToTargetAndShoot",} -- standard for all frigates; )' Производственные корабли * 'Производство addAbility('NewShipType, "CanBuildShips", 1, ''--вероятно, параметр "разрешения" - доступно ли по умолчанию; "Fighter_Hgn, ..., Corvette_Hgn,",'' --здесь перечисляем, корабли каких семейств можно строить, смотреть в '''familylist.lua;'' "Utility, ..., Fighter,"'' --здесь перечисляем какие типы кораблей вообще можно строить, смотреть в familylist.lua;'' )' * 'Ангары addAbility('NewShipType, "ShipHold", 1, --вероятно, параметр "разрешения" - доступно ли по умолчанию;'' 250, 20, "rallypoint", "Fighter,Corvette,Utility",'' --здесь перечисляем какие типы кораблей можно принимать на борт, смотреть в '''familylist.lua;'' 35, {Frigate = "800",},'' --количество фрегатов принимаемых на борт, цифры, вероятно, как-то связаны с NewShipType.unitCapsNumber, а может и нет;'' ...,'' --заполняем аналогично, название семейств смотрим в familylist.lua;'' {Corvette = "75",}'' -- цифры, на самом деле, какие-то неадекватные, нужно сравнивать;'' )' Эти две абилити как-то связаны с ShipHold & CanBuildShips: '''addAbility('NewShipType, "CanDock", 1, ''--доступно ли по умолчанию;'' 0 ) 'addAbility('NewShipType, "CanLaunch") Обеспечение * '''Добыча ресурсов addAbility('NewShipType, "Harvest", 1, --доступно ли по умолчанию;'' 200, 8, 300 ''') * Собирание обломков addAbility('''NewShipType, "SalvageCommand", 1)' '' -- цифра показывает, доступно ли по умолчанию; Чтобы обломок можно было забрать, ему нужно прописать эту ability: addAbility('''NewShipType, "CanBeSalvaged")' * 'Ремонт''' addAbility('NewShipType, "RepairCommand", 0, --доступно ли по умолчанию;'' 500, 9, {SuperCap = "18",}, ... --искать в '''familylist.lua, хз, чо значат циферьки; {Flagship = "18",} )' Чтобы корабль можно было починить, ему нужно прописать эту ''ability: addAbility(NewShipType, "CanBeRepaired") Гиперпространство * '''Гипер-прыжок addAbility('NewShipType, "HyperSpaceCommand", 0, --доступно ли по умолчанию;'' 1, 200, 500, 0, 3 ''') -- hiigarans have (0, 1, 200, 500, 0, 3), vaygr have (0, 1, 500, 1000, 0, 3); * Использование гипер-воронок addAbility('NewShipType, "HyperspaceViaGateCommand", 1, --доступно ли по умолчанию;'' 3, 1, 0.3 ''') * Формирование гипер-канала addAbility('NewShipType, "FormHyperspaceGateCommand", 1, --доступно ли по умолчанию;'' 1000, 500, 1000, 0 ''') * Гипер-ингибитор addAbility('NewShipType, "HyperspaceInhibitorAbility", 0, --вероятно, параметр "разрешения" - доступно ли по умолчанию (нет, т.к. нужен модуль);'' 12000'' -- радиус ингибитор-поля;'' ''') Другие умения * Стэлс addAbility('NewShipType, "CloakAbility", 0, --вероятно, параметр "разрешения" - доступно ли по умолчанию (нет, т.к. нужен модуль);'' 2, 2000, 4000, 3, 100, 1, 1000 ''') * Пинг addAbility('NewShipType, "SensorPing", 0, --доступно ли по умолчанию;'' 1, 10, 2.5 ''') * ЭМИ addAbility('NewShipType, "SpecialAttack", 0, --доступно ли по умолчанию;'' "EMP"'' --вероятно, тип специальной атаки;'' ''') Для защиты от этого умения (или просто, чтобы оно работало???) атакуемым кораблям нужно прописать: addShield('NewShipType, "EMP", 310, --крутость щита; 20 --время в секундах на восстановление; ') * Абордаж addAbility('NewShipType, "CaptureCommand", 1, --доступно ли по умолчанию;'' -50 ''') Чтобы корабль можно было захватить, ему нужно прописать: addAbility('NewShipType, "CanBeCaptured", 45, --usually is used 45, but HICFr, HFFr & HTFr are 30; generally speaking, hiigaran battle frigates; 0.1 -- usually is used 0.1, but HMFr & HDFFr got 0.5; ') * Силовое поле AddShipAbility('NewShipType, "DefenseField", 1, --доступно ли по умолчанию;'' "ThisShipOnly", --ареал распространения (смотри "Усилители'"); 0 ')' '''addAbility('NewShipType, "DefenseFieldShieldAbility", --имеется большое подозрение, что эта фича связана с синглплеерной фишкой защиты от радиационного поля; 0,'' --доступно ли по умолчанию;'' 1200, 0, 0 )' "Усилители" В общем виде это дело выглядит так: '''AddShipMultiplier('NewShipType, "WeaponAccuracy", --тип усиления; "OwnShipsWithinRadiusExcludingThisShip", --ареал распространения; "Linear", --график увеличения статов (неясно); 1.15, 1.15, --коэффициенты, хз, почему два; 4500 --расстояние распространения ''') * Типы усиления: *# WeaponAccuracy ''--точность орудий;'' *# WeaponDamage ''--урон от орудий;'' *# SensorDistortion ''--ухудшение вражеских сенсоров;'' *# DustCloudSensitivity ''--чувствительность к пылевым облакам;'' *# NebulaSensitivity ''--чувствительность к туманностям;'' * Типы ареалов: *# ThisShipOnly ''--только этот корабль;'' *# OwnShipsWithinRadius ''--корабли в радиусе;'' *# OwnShipsWithinRadiusExcludingThisShip ''--корабли в радиусе, за исключением корабля-источника;'' Примеры: AddShipMultiplier(NewShipType, "WeaponAccuracy", "OwnShipsWithinRadiusExcludingThisShip", "Linear", 1.15, 1.15, 4500) -- КомКорвет; AddShipMultiplier(NewShipType, "SensorDistortion", "OwnShipsWithinRadius", "Linear", 0.6, 0.6, 6000) --ДисторПробка; AddShipMultiplier(NewShipType, "NebulaSensitivity", "ThisShipOnly", "Linear", 0, 0, 0) --Муверы; Оружие StartShipWeaponConfig('NewShipType, "Hgn_VulcanKineticTurretWeak", "Weapon_TurretTop", "Weapon_TurretTop" ') См. также * Перенос корабля из другого мода; * Создание новой расы для Homeworld 2 * Настройка Eclipse для работы с модами; Ссылки ---- Категория:МоддингКатегория:Скриптинг